package com.yaofeng.mybatis.modules.sys.entity;



import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import lombok.experimental.Accessors;
import javax.validation.constraints.*;

/**
 * <p>
 * 
 * </p>
 *
 * @author yaofeng
 * @since 2019-08-30
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_user")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {


    private static final long serialVersionUID = -3694146223881472701L;

    /**
     * 主键
     * 后端把Long类型的数据传给前端，前端可能会出现精度丢失的情况。
     * 例如：201511200001725439这样一个Long类型的整数，传给前端后会变成201511200001725440。
     * 解决 方法 将long映射成string类型
     */
    @TableId
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long userId;


    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long deptId;

    /**
     * 登录账号名
     */
    private String loginName;

    /**
     * 用户名
     */
    private String userName;

    /**
     * 密码
     */
    private String userPassword;

    /**
     * 盐值
     */
    private String salt;

    /**
     * 邮箱
     */
    @Email(message="请填写正确的邮箱地址")
    private String email;

    /**
     * 手机号
     */
    private String mobile;

    /**
     * 状态  0 正常  1 禁用
     */
    private Integer status;

    /**
     * 性别   1 男  2 女  3 保密
     */
    private Integer sex;

    /**
     * 地址
     */
    private String address;

    /**
     * 生日
     */
    private LocalDate birthday;

    /**
     * 身份证
     */
    private String idCard;

    /**
     * 用户头像
     */
    private String avatar;

    /**
     * 创建时间 自动填充
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间 自动填充
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 创建人id 自动填充
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long createUserId;

    /**
     * 更新人id 自动填充
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long updateUserId;

    /**
     * 前端密码输入次数,最多允许5次认证，第5次认证失败账号被锁定5分钟
     */
    private Integer inputTime;

    /**
     * 锁定时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lockTime;

    @TableField(exist = false)
    private String [] roleIds;

    @TableField(exist = false)
    private String [] postIds;

    @TableField(exist = false)
    private Dept  dept;


}
